/**
 * @author		Ben Layet
 * @version 	0.2
 * @date		23 Sep 2008
 */
package org.ignoramus.application.model;

import java.util.Iterator;

/**
 * Review Card containing various pieces of information that the user wants to
 * learn.
 */
public interface ReviewCard
{

	/**
	 * Gets a piece of information from this card.
	 * 
	 * @param informationType
	 *            the type of information to get.
	 * @return
	 * @throws IgnoramusModelException
	 *             if the information name is not found.
	 */
	public String getInformation(String informationType) throws IgnoramusModelException;

	/**
	 * Gets the content of the card.
	 * 
	 * @return the content of the card.
	 */
	public Iterator<CardElement> getElementsIterator();

	/**
	 * Sets a piece of information on this card.
	 * 
	 * @param informationType
	 *            the type of information to set.
	 * @param informationValue
	 *            the value to set.
	 */
	public void setInformation(String informationType, String informationValue) throws IgnoramusModelException;

	/**
	 * @return the title
	 */
	public String getTitle();

	/**
	 * @param title
	 *            the title to set
	 */
	public void setTitle(String title);

	/**
	 * Adds an event in the study log.
	 * 
	 * @param event
	 *            the event.
	 */
	public void logEvent(StudyEvent event);

	/**
	 * Gets the knowledge of this card.
	 * @return the knowledge of this card.
	 */
	public Knowledge getKnowledge();
	
	
	/**
	 * Adds a card listener.
	 * 
	 * @param l
	 *            the listener.
	 */
	public void addReviewCardListener(ReviewCardListener l);

	/**
	 * Removes a card listener.
	 * 
	 * @param l
	 *            the listener.
	 */
	public void removeReviewCardListener(ReviewCardListener l);

}
